//系统方案
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<errno.h>
#define LOG "log.txt"
//open返回一个int,文件描述符,失败返回-1
int main()
{
    umask(0);
    //O_CREAT|O_WRONLY:默认不会对原始文件内容进行清空。
    //O_TRUNC：会将文件清空
    //fopen(LOG,"w");
    //int fd=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);//O_CREAT:如果文件不存在就创建
    //fopen(LOG,"a");
    //int fd=open(LOG,O_WRONLY|O_CREAT|O_APPEND,0666);//O_CREAT:如果文件不存在就创建
    //读文件：
    int fd=open(LOG,O_RDONLY);
    if(fd==-1)
    {
        printf("fd:%d,errno:%d,errstring:%s\n",fd,errno,strerror(errno));
    
    }
    else
    {
        printf("fd:%d,errno:%d,errstring:%s\n",fd,errno,strerror(errno));
    }
    
    char buffer[1024];

    ssize_t n=read(fd,buffer,sizeof(buffer)-1);//使用系统接口进行IO时，要注意\0问题。
    if(n>0)
    {
        buffer[n]='\0';
        printf("%s\n",buffer);
    }
    //const char*msg="hello zhenbailinzi";
    //const char*msg="bbbbb";
    //int cnt =5;
    //while(cnt)
    //{
    //    char line[128];
    //    snprintf(line,sizeof(line),"%s,%d\n",msg,cnt);
    //    write(fd,line,strlen(line));//这里的strlen不要+1，\0是c语言的规定，不是文件的规定！\0在文件中默认为乱码
    //    cnt--;
    //}
    close(fd);
    return 0;
}


//#include<stdio.h>
//
//#define LOG "log.txt"
//int main()
//{
//    //w:默认写方式打开文件，如果文件不存在，就创建它。
//    //默认如果只是打开，文件内容会自动被清空
//    //每次写入都会从最开始进行写入
//    FILE*fp=fopen(LOG,"r");
//    if(fp==NULL)
//    {
//        perror("fopen");
//        return 1;
//    }
//
//    while(1)
//    {
//        char line[128];
//        if(fgets(line,sizeof(line),fp)==NULL)break;
//        else
//        {
//            printf("%s",line);
//        }
//    }
//    //const char*msg="hello zhenbailinzi";
//    //int cnt=5;
//    //while(cnt--)
//    //{
//    //    char buffer[256];
//    //    snprintf(buffer,sizeof(buffer),"%s:%d\n",msg,cnt);
//    //    fputs(buffer,fp);
//    //    //fprintf(stdout,"%s:%d\n",msg,cnt);
//    //    //fputs(msg,fp);
//    //}
//    fclose(fp);
//    return 0;
//}
